Introducción a Jelly Forest - Guía de juego en Unity presenta un juego runner 2D con funciones blockchain como inicio de sesión con redes sociales, mejoras y objetos cosméticos almacenados en un smart contract wallet.
JellyForest
, que, con algunos ajustes, pudimos compilar y hacer funcionar en iOS y Android.
SequenceConfig
scriptable object que importó desde el menú Samples en el Package Manager durante la etapa de instalación, agregue sus client ids de Google y Apple que también añadió en el Builder, así como su Configuration Key en WaaSConfigKey
Settings > API Access Keys
- necesita la clave prod
Canvas
, agregue el componente Canvas Scaler
y use el modo de escala de UI “Scale with Screen Size”. Esto hará que el LoginPanel (y cualquier otro elemento UI bajo este Canvas) se escale automáticamente al cambiar entre plataformas de compilación.LoginPanel
a la jerarquía de su escena bajo el Canvas. Puede encontrarlo en la ventana Project bajo Packages > Sequence Embedded Wallet SDK > SequenceFrontend > Prefabs
.Open
en el LoginPanel
. Vea nuestra implementación a continuación:LoginPanel
en la jerarquía para poder editarlo libremente en la vista de escena
LoginPanel
en la jerarquíaLoginPanel
en la jerarquíaPrefab > Unpack Completely
LoginPage
y OpenIdAuthenticator
.
La autenticación funciona mediante el Open ID Connect Implicit Flow.
OpenIdAuthenticator.SignedIn
. Esto inicia el proceso de autorización en SequenceLogin.ConnectToWaaS
.
SequenceWallet.OnWalletCreated
.
SequenceConnector
desde “Useful Scripts” en Samples en la página del Package Manager para el “Sequence Embedded Wallet SDK”. Por defecto, contiene mucho código útil para comenzar y sirve como una interfaz práctica para comunicarse con el SDK. Lo usamos bastante en nuestra integración con JellyForest.
En JellyForest, también creamos un LevelLoader MonoBehaviour que carga la siguiente escena cuando se dispara el evento SequenceWallet.OnWalletCreated
.
git clone https://github.com/0xsequence-demos/cloudflare-worker-sequence-relayer.git
luego cd cloudflare-worker-sequence-relayer
git checkout permissionedMinter
pnpm install
– para instalar las dependenciaswrangler.toml
name
PKEY
CONTRACT_ADDRESS
PROJECT_ACCESS_KEY
– esta es su clave API de producción del Builder Console que obtuvo antes al configurar el objeto scriptable SequenceConfig
CHAIN_HANDLE
– si no está seguro de cuál es, puede ver el CHAIN_HANDLE
de cada red respectiva en la página Node Gateway del Builder Console.pnpm dev
– esto implementará el servidor localmente. Debería ver en la línea de comandos a qué localhost se implementócurl http://localhost:8787
– sustituya el localhost que le hayan asignado. Esto enviará un ping al servidor.Contracts
y haga clic para abrirloWrite Contract
grantRole
role
ingrese 0x9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6
– este es el hash Keccak-256 de MINTER_ROLE
account
pegue la dirección del wallet del minterwrangler deploy
– esto implementará el código en un Cloudflare Worker y le dará una URL de minteoproof
es generado por el cliente que envía la solicitud de minteo. En el Unity SDK esto se implementa mediante el MintingRequestProver.
PermissionedMinter.MintToken
.
En Jelly Forest, a medida que el jugador avanza por el nivel recolecta muchas monedas, todas son tokens ERC1155. Aún hay algunos retos que debemos resolver para brindar una excelente experiencia de usuario.
SequenceWallet
en Jelly Forest, SequenceConnector, que usamos como interfaz principal para comunicarnos con el SDK de Sequence en nuestro juego, crea un Inventory
.
Inventory
se usa como un caché simple en nuestro juego. Cuando se crea por primera vez, y cuando se solicita, usamos el Indexer para obtener todos los tokens en el wallet del usuario. A partir de ahí, cada vez que el usuario gana un token, actualizamos nuestro caché (Inventory
) y los datos en la cadena.
Lea la implementación completa de Inventory
aquí
SequenceConnector
y obtenemos una referencia en Awake.
Inventory
y añadirá una transacción de minteo a la cola del PermissionedMinterTransactionQueuer
. El PermissionedMinterTransactionQueuer
combinará automáticamente las transacciones cuando sea posible para que usted gaste la menor cantidad de dinero posible en comisiones de gas.
En Jelly Forest, hemos configurado nuestro gestor de transacciones para enviar transacciones cada vez que el jugador termina una partida, pero no antes de cada 30 segundos.
TransactionQueuers
pueden configurarse para enviar transacciones automáticamente cada X segundos, cuando se solicite (mediante llamada de función) pero no antes de cada Y segundos, o cuando se solicite, ignorando cualquier umbral mínimo de tiempo configurado (Y segundos).
Aquí hay algunos aspectos a considerar al decidir cómo configurar sus gestores de transacciones:
data
, el contrato verifica si recibió la cantidad requerida de cada id de token; si esto se cumple, el contrato quema los tokens y mintea el id de token solicitado al remitente (usuario); de lo contrario, la transacción falla y se revierte.
Le hemos otorgado a este contrato permisos de minteo para nuestro contrato del juego en el Builder Console:
Contracts
y haga clic para abrirloWrite Contract
grantRole
role
ingrese 0x9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6
– este es el hash Keccak-256 de MINTER_ROLE
account
pegue la dirección del wallet del minterBurnToMint
compartido arriba no ha sido auditado por terceros. ¡Reutilícelo con precaución!
:::
Cuando un usuario compra una mejora o cosmético en la tienda, enviamos una transacción al contrato inteligente BurnToMint
agregando una PurchaseShopItemQueueableTransaction a nuestro SequenceWalletTransactionQueuer en nuestro SequenceConnector
.
BurnToMint
en la blockchain.
Creamos una extensión de editor para nuestros scriptable objects ShopItem
agregando un botón que, al presionarlo, verifica si los requisitos de minteo definidos en la blockchain coinciden con los definidos en el scriptable object; si difieren, enviará una transacción para actualizar los requisitos de minteo en el contrato BurnToMint
en la blockchain para que coincidan con el scriptable object. La transacción se envía mediante un wallet EOA creado a partir de una clave privada almacenada como variable de entorno en la máquina de uno de nuestros desarrolladores. Este wallet EOA es el propietario de este contrato.
De hecho, nuestras páginas de la tienda consultan el contrato inteligente cada 60 segundos (y cada vez que se abren) para detectar cambios en los requisitos de minteo, actualizando su interfaz en consecuencia. ¡Esto nos permite hacer ajustes en vivo a la economía del juego sin requerir una actualización!
Haga clic en el video a continuación
Item
un PowerUpType
y un rango. Luego, consultamos nuestro Inventory
para encontrar el mejor potenciador de cada tipo que el jugador posee.